package com.gupao.javavip.gof.singleton;

import java.io.Serializable;

/**
 * 饿汉式单例模式
 * <p>
 * 优点：简单直接，线程安全
 * 缺点：类初始化时变实例化，提前占用了存储空间，可能造成浪费
 * <p>
 * 虽然，增加 readResolve()方法返回实例，解决了单例被破坏的问题。
 * 但是，实际上实例化了两次，只不过新创建的对象没有被返回而已。那如果，创建对象的动作发生频率增大，就意味着内存分配开销也就随之增大
 */
public class HungrySingleton implements Serializable {
    //static保证类初始化时便实例化
    private static final HungrySingleton INSTANCE = new HungrySingleton();

    //构造方法私有化
    private HungrySingleton() {
        if (INSTANCE != null) {
            throw new RuntimeException("不允许创建多个实例");
        }
    }

    //提供全局访问点
    public static HungrySingleton getInstance() {
        return INSTANCE;
    }

    //防止通过序列化、反序列化破坏单例
    private Object readResolve() {
        return INSTANCE;
    }
}
